package com.muyu.cloud.commodity.service;

import com.muyu.cloud.commodity.domain.model.Product;
import com.muyu.cloud.commodity.domain.model.ProductSku;
import com.muyu.cloud.commodity.domain.model.Brand;
import com.muyu.cloud.commodity.domain.model.Category;
import com.muyu.cloud.commodity.domain.model.SpecGroup;
import com.muyu.common.core.domain.Result;
import com.muyu.common.product.domain.StockCheckReq;
import com.muyu.common.product.domain.StockCheckResp;
import com.muyu.common.product.domain.ProductInfo;
import com.muyu.common.product.domain.ProductSkuInfo;
import com.muyu.common.product.domain.BrandInfo;
import com.muyu.common.product.domain.CategoryInfo;

import java.util.List;

/**
 * 商品服务远程调用服务接口
 *
 * @author JiaCheng
 * @version 1.0
 * @since 2025-09-21
 */
public interface ProductRemoteService {

    /**
     * 根据商品ID获取商品信息
     *
     * @param productId 商品ID
     * @return 商品信息
     */
    Result<Product> getProductInfo(Long productId);

    /**
     * 根据SKU ID获取SKU信息
     *
     * @param skuId SKU ID
     * @return SKU信息
     */
    Result<ProductSku> getSkuInfo(Long skuId);

    /**
     * 根据品牌ID获取品牌信息
     *
     * @param brandId 品牌ID
     * @return 品牌信息
     */
    Result<Brand> getBrandInfo(Long brandId);

    /**
     * 根据分类ID获取分类信息
     *
     * @param categoryId 分类ID
     * @return 分类信息
     */
    Result<Category> getCategoryInfo(Long categoryId);

    /**
     * 批量获取商品信息
     *
     * @param productIds 商品ID列表
     * @return 商品信息列表
     */
    Result<List<Product>> getBatchProductInfo(List<Long> productIds);

    /**
     * 批量获取SKU信息
     *
     * @param skuIds SKU ID列表
     * @return SKU信息列表
     */
    Result<List<ProductSku>> getBatchSkuInfo(List<Long> skuIds);

    /**
     * 检查商品库存
     *
     * @param stockCheckReq 库存检查请求
     * @return 库存检查响应
     */
    Result<StockCheckResp> checkStock(StockCheckReq stockCheckReq);

    /**
     * 获取商品规格信息
     *
     * @param productId 商品ID
     * @return 规格组信息列表
     */
    Result<List<SpecGroup>> getProductSpecs(Long productId);

    // ========== DTO转换方法 ==========

    /**
     * 将Product实体转换为ProductInfo DTO
     */
    ProductInfo convertToProductInfo(Product product);

    /**
     * 将ProductSku实体转换为ProductSkuInfo DTO
     */
    ProductSkuInfo convertToProductSkuInfo(ProductSku sku);

    /**
     * 将Brand实体转换为BrandInfo DTO
     */
    BrandInfo convertToBrandInfo(Brand brand);

    /**
     * 将Category实体转换为CategoryInfo DTO
     */
    CategoryInfo convertToCategoryInfo(Category category);
}
